package com.ruoyi.project.his.serivce.impl;

import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.exception.CustomException;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.project.his.domain.Doctor;
import com.ruoyi.project.his.domain.DoctorDept;
import com.ruoyi.project.his.mapper.DoctorDeptMapper;
import com.ruoyi.project.his.mapper.DoctorMapper;
import com.ruoyi.project.his.serivce.IDoctorDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 科室管理服务实现类型
 */
@Service
public class DoctorDeptServiceImpl implements IDoctorDeptService {
    @Autowired
    private DoctorDeptMapper doctorDeptMapper;
    @Autowired
    private DoctorMapper doctorMapper;

    /**
     * 按照条件查询科室集合
     * @param doctorDept
     * @return
     */
    @Override
    public List<DoctorDept> selectDoctorDeptList(DoctorDept doctorDept) {
        return doctorDeptMapper.selectDoctorDeptList(doctorDept);
    }

    /**
     * 查询所有科室
     * @return
     */
    @Override
    public List<DoctorDept> selectDoctorDeptAll() {
        return doctorDeptMapper.selectDoctorDeptAll();
    }

    /**
     * 新增科室
     * @param doctorDept
     * @return
     */
    @Override
    public int insertDoctorDept(DoctorDept doctorDept) {
        return doctorDeptMapper.insertDoctorDept(doctorDept);
    }

    /**
     * 更新科室
     * @param doctorDept
     * @return
     */
    @Override
    public int updateDoctorDept(DoctorDept doctorDept) {
        return doctorDeptMapper.updateDoctorDept(doctorDept);
    }

    /**
     * 批量删除
     * @param deptIds
     * @return
     */
    @Override
    public int deleteDoctorDeptByDeptIds(Integer[] deptIds) {
        // 判断每个要删除的科室，是否有医生存在，如果有，则不能删除。
        for(Integer deptId : deptIds){
            // 查询科室对应的医生
            List<Doctor> doctors = doctorMapper.selectDoctorsByDeptId(deptId);
            if(doctors.size() > 0){
                // 有医生，不能删除
                throw new CustomException("科室中存在医生,不能删除");
            }
        }
        return doctorDeptMapper.deleteDoctorDeptByDeptIds(deptIds);
    }

    /**
     * 根据主键查询科室
     * @param deptId
     * @return
     */
    @Override
    public DoctorDept selectDoctorDeptByDeptId(Integer deptId) {
        return doctorDeptMapper.selectDoctorDeptByDeptId(deptId);
    }

    /**
     * 校验科室名称唯一
     * @param doctorDept
     * @return
     */
    @Override
    public String checkDocketDeptNameUnique(DoctorDept doctorDept) {
        Integer deptId = StringUtils.isNull(doctorDept.getDeptId()) ? -1 : doctorDept.getDeptId(); // 获取主键。
        DoctorDept info = doctorDeptMapper.checkDocketDeptNameUnique(doctorDept.getDeptName());
        if(StringUtils.isNotNull(info) && !deptId.equals(info.getDeptId())){ // 判断查询结果非空，且主键不同。
            return UserConstants.NOT_UNIQUE; // 不唯一
        }
        return UserConstants.UNIQUE; // 唯一
    }

    /**
     * 校验科室编码唯一
     * @param doctorDept
     * @return
     */
    @Override
    public String checkDocketDeptCodeUnique(DoctorDept doctorDept) {
        Integer deptId = StringUtils.isNull(doctorDept.getDeptId()) ? -1 : doctorDept.getDeptId(); // 获取主键。
        DoctorDept info = doctorDeptMapper.checkDocketDeptCodeUnique(doctorDept.getDeptCode());
        if(StringUtils.isNotNull(info) && !deptId.equals(info.getDeptId())){ // 判断查询结果非空，且主键不同。
            return UserConstants.NOT_UNIQUE; // 不唯一
        }
        return UserConstants.UNIQUE; // 唯一
    }
}
